package com.chisheng.caa.util;

import com.chisheng.caa.pojo.ValueDesc;

import java.io.Serializable;
import java.util.*;
import java.util.stream.Collectors;

import static cn.hutool.core.util.IdUtil.getSnowflakeNextIdStr;

/**
 * 响应工具类
 */
public final class ResponseUtil {

    /**
     * 主键的键名称
     */
    public final static String KEY_NAME = "id";

    /**
     * 值的键名称
     */
    public final static String VALUE_NAME = "value";

    private ResponseUtil() {
        throw new UnsupportedOperationException();
    }

    /**
     * 将集合中的数据转换为 k-v 形式集合。使用与前端的数据展示。
     */
    public static Collection<Map<String, Object>> kvList(Collection<?> c) {
        return c.stream()
                .map(ResponseUtil::getKvMap)
                .collect(Collectors.toList());
    }

    /**
     * 将 ValueDesc 数组转换为 k-v 映射
     *
     * @param arr ValueDesc 数组
     * @return k-v 映射
     */
    public static List<Map<String, Object>> getValueDescList(ValueDesc[] arr) {
        return Arrays.stream(arr).map(e -> Map.of("desc", e.getDesc(),
                "value", (Object) e.getValue())).collect(Collectors.toList());
    }

    /**
     * 获取键值映射。使用雪花算法生成键。
     *
     * @param value 值
     * @return 键值映射
     */
    public static Map<String, Object> getKvMap(Object value) {
        return getKvMap(getSnowflakeNextIdStr(), value);
    }

    /**
     * 获取键值映射
     *
     * @param id    键
     * @param value 值
     * @return 键值映射
     */
    public static Map<String, Object> getKvMap(String id, Object value) {
        return Map.of(KEY_NAME, id, VALUE_NAME, value);
    }

}
